哈囉大家好~
今天因為是假日,有更充分的時間來寫文章啦XD
除了昨天提到的模版繼承功能,今天要來學習如何在模板中呈現數據以及如何傳遞數據。
那就開始吧!
在前幾天討論routes的時候有提到可以透過route來傳遞數據,範例程式碼如下:
return view('home', ['user' => 'JoJo']);
也可以利用with這個method來傳遞數據,程式碼如下:
return view('home')
->with('user' => 'JoJo')
->with('hobby' => 'dancing')
除了傳遞數據到指定的頁面之外,若我想要將特定數據顯示在多個頁面,可以如何用程式碼實現呢?
首先要到路徑app/Providers這個目錄的AppServiceProvider.php中,
在boot() function中利用share()傳遞想要分享至全部頁面的數據:
<?php
namespace App\Providers;
use Illuminate\Support\Facades\View;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{
public function boot(): void
{
View::share('hello', 'World');
}
}
這裡share()裡面有兩個參數,第一個就是變數,第二個是該變數對應的值。
假設我想要讓這個數據顯示在下方的blade模版:
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<h1>Hello World! My first Laravel Project!</h1>
<h3>{{ $hello }}</h3>
</body>
</html>
在blade模版中變數要用{{}}包起來,就可以看到剛剛傳送的變數值World。
除了上述方法之外,我們也可以用View Composers來傳遞數據!
View Composers可以是callback function也可以是class methods,當要呈現特定畫面時就會被呼叫。
什麼時候會需要使用到View Composers呢?
當某畫面每次被渲染時,想要一起更新或呈現的數據就可以利用View Composers來撰寫:(在AppServiceProvider.php中撰寫composer)
<?php
namespace App\Providers;
use Illuminate\Support\Facades;
use Illuminate\Support\ServiceProvider;
use Illuminate\View\View;
class AppServiceProvider extends ServiceProvider
{
public function boot(): void
{
Facades\View::composer('hello', function (View $view) {
$view->with('message', 'shout out to Laravel!');
});
}
}
上方程式碼表示,我將$message這個變數傳給hello.blade.php這個模版,變數的值是'shout out to Laravel!',所以我可以在模版中使用這個變數:
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<h1>Hello World! My first Laravel Project!</h1>
<h1>{{ $message }}</h1>
</body>
</html>
畫面上就會顯示大大的“shout out to Laravel!”
把處理路由和數據的邏輯分開,日後在維護程式碼上也相對容易~
今天也簡單分享了在blade模版中如何傳遞數據,接下來想要學習如何一次傳遞更多的數據、傳遞不同的數據類型(例如:物件、陣列⋯⋯等)
以及如何利用迴圈來呈現數據,條件句判斷數據是否顯示。
那就明天再見囉!
希望大家週末都能好好休息,有個愉快的假日